我正在寻找一种最佳方式来调整包装文本的大小TextView,使其适合其 getHeight 和 getWidth 范围。我不只是在寻找一种包装文本的方法——我想确保它既能包装又足够小以完全适合屏幕。
TextView
我在 StackOverflow 上看到了一些需要自动调整大小的案例,但它们要么是非常特殊的情况,有 hack 解决方案,没有解决方案,要么涉及TextView递归地重新绘制直到它足够小(这是内存密集型并强制用户可以在每次递归时逐步缩小文本)。
但我确信有人已经找到了一个很好的解决方案,而不涉及我正在做的事情:编写几个解析和测量文本、调整文本大小并重复直到找到合适的小尺寸的繁重例程。
使用什么例程TextView来换行文本?这些不能以某种方式用于预测文本是否足够小吗?
tl; dr :是否有一种最佳实践方法可以自动调整 a 的大小TextView以适应、包裹在其 getHeight 和 getWidth 范围内?
从 2018 年 6 月起,Android 正式开始为Android 4.0(API 级别 14)及更高版本 支持此功能。 看看:自动调整 TextViews
使用 Android 8.0(API 级别 26)及更高版本 :
<?xml version="1.0" encoding="utf-8"?> <TextView android:layout_width="match_parent" android:layout_height="200dp" android:autoSizeTextType="uniform" android:autoSizeMinTextSize="12sp" android:autoSizeMaxTextSize="100sp" android:autoSizeStepGranularity="2sp" />
以编程方式:
setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit) textView.setAutoSizeTextTypeUniformWithConfiguration( 1, 17, 1, TypedValue.COMPLEX_UNIT_DIP);
Android 8.0(API 级别 26)之前的 Android 版本 :
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="200dp" app:autoSizeTextType="uniform" app:autoSizeMinTextSize="12sp" app:autoSizeMaxTextSize="100sp" app:autoSizeStepGranularity="2sp" /> </LinearLayout>
TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration( TextView textView, int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit) TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(textView, 1, 17, 1, TypedValue.COMPLEX_UNIT_DIP);
注意: TextView 必须有 layout_width=” match_parent ” 或 绝对大小!